保利威文档中心

幫助中心

保利威行動端SDK Xcode 16 適配指南

更新時間:2025-05-09 15:35:54

2025-04-29

蘋果公司要求,2025年4月24日開始,所有上傳到 App Store Connect 的應用必須使用 Xcode 16 或更高版本構建,並使用 iOS 18、iPadOS 18、tvOS 18、visionOS 2 或更高版本的 SDK。

[官方文件連結]

https://developer.apple.com/news/upcoming-requirements/?id=02212025a

如果沒有適配,您的應用可能面臨:

App Store 提交時被拒絕

與 iOS 18 和其他最新作業系統版本的相容性問題

不少客戶整合了保利威直播、點播或多場景 SDK,如何適配 Xcode 16 的 SDK 版本?遇到哪些問題可能是未適配 Xcode 16 造成的?

目前,保利威行動端 SDK 已適配 iOS 18,本文將介紹保利威行動端 SDK 適配 Xcode 16 的技術經驗。

一、未適配 SDK 的已知問題

問題 1

Bitcode 相關錯誤

在使用 Xcode 16 提交應用到 App Store 時,您可能會遇到以下錯誤:


The following issues occurred while distributing your application.

Asset validation failed Invalid Executable. The executable 'YourApp.app/Frameworks/YourSDK.framework/YourSDK' contains bitcode. (ID: 12345678-1234-1234-1234-123456789012)

[問題原因]

Xcode 16 完全移除了對 bitcode 的支援,而我們的舊版 SDK 仍包含 bitcode。當您嘗試提交應用時,App Store Connect 會拒絕包含 bitcode 的二進位檔案。

[實際案例]

某客戶使用保利威行動端 SDK 5.x 版本,在 Xcode 15 上構建時一切正常,但升級到 Xcode 16 後,應用提交被拒絕,錯誤日誌顯示:


Asset validation failed Invalid Executable. The executable 'ClientApp.app/Frameworks/PLVIJKPlayer.framework/PLVIJKPlayer' contains bitcode.

[Bitcode 錯誤範例]

問題 2

maskView 同名屬性在 iOS 18 引發崩潰

在 iOS 18 中,如果您的 SDK 或應用中定義了與 UIView 類別的 maskView 屬性同名的屬性,將觸發斷言並導致應用崩潰。

[問題原因]

iOS 18 對 UIView.maskView 增加了斷言檢查。在之前的 iOS 版本中,開發者可能在自訂視圖類別中定義了名為 maskView 的屬性,而這與 UIKit 中 UIView 類別的屬性同名。

在 iOS 18 中,當系統試圖存取 UIView 的 maskView 屬性時,會檢查是否存在同名屬性衝突,如果發現衝突,將觸發斷言並導致應用崩潰。

[崩潰表現]

當應用在 iOS 18 裝置上執行時會出現崩潰,崩潰日誌會顯示類似以下內容:


*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Set `maskView` on <CustomView: 0x12345678> is not allowed.'

或者顯示斷言失敗資訊:


Assertion failed: (![self respondsToSelector:@selector(maskView)] || [self.class instancesRespondToSelector:@selector(maskView)]), function -[UIView maskView], file /Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-5023.100.106/UIView.m, line 13954.

[受影響程式碼範例]


// 在SDK或应用中的自定义视图类

@interface customView : UIView
@property (nonatomic, strong, readonly) UIView *maskView; // 与UIKit中UIView的属性同名
@end
@implementation customView

- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {[self addSubview:self.maskView];}
return self;
}

- (UIView *)maskView {
if (!_maskView) {
_maskView = [[UIView alloc] init];
_maskView.backgroundColor = [UIColor clearColor];
// 其他配置...

}
return _maskView;
}

@end

[解決方案]

將業務程式碼中的 maskView 屬性修改為其他命名方式,例如改為 customMaskView:

@interface customView : UIView
// 修改为不同的名称以避免与UIKit冲突
@property (nonatomic, strong, readonly) UIView *customMaskView;
@end
@implementation customView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.customMaskView];

}

return self;

}

- (UIView *)customMaskView {
if (!_customMaskView) {
_customMaskView = [[UIView alloc] init];
_customMaskView.backgroundColor = [UIColor clearColor];

// 其他配置...

}
return _customMaskView;
}

@end

[注意事項]

這個問題只在 iOS 18 及以上版本中出現,但建議對所有版本進行適配。 如果您的 SDK 或應用中使用了第三方函式庫,請確保這些函式庫也已經適配了 iOS 18,並檢查它們是否存在 maskView 同名屬性問題。

二、保利威行動端 SDK 適配技術指南

步驟 1

更新至相容 Xcode 16 的 SDK

1.保利威行動端點播 SDK

  • 幫助中心地址:https://help.polyv.net/#/vod/ios/
  • GitHub 地址:https://github.com/polyv/polyv-ios-vod-sdk
  • SDK 適配 Xcode 16 推薦版本:2.23.0 及以上。預設引用解決 PLVIJKPlayer 0.15.0 解決 bitcode 問題。
  • SDK 適配 Xcode 16 的最低版本:2.22.2。該版本僅解決 SDK 內部使用 maskView 同名屬性問題,需升級 PLVIJKPlayer 0.15.0 版本
  • 若同時整合多場景 SDK 和點播 SDK,請看本單元第五小節

2.行動端點播播放器 SDK

3.行動端多場景 SDK

  • 幫助中心地址:https://help.polyv.net/#/live/ios/
  • GitHub 地址:https://github.com/polyv/polyv-ios-livescenes-sdk-demo
  • SDK 適配 Xcode 16 推薦版本:1.24.0 及以上。預設引用解決 PLVIJKPlayer 0.15.0 解決 bitcode 問題
  • SDK 適配 Xcode 16 最低版本:1.20.0。該版本修改 Demo 使用 maskView 同名屬性的問題
  • 該 SDK 內部未使用 maskView 同名屬性,僅 Demo 層有應用,如不升級可直接對 Demo 層原始碼進行修改
  • 若同時整合多場景 SDK 和點播相關 SDK,請看本單元第五小節

4.行動端 Webview SDK

5.同時整合多場景 SDK 和點播相關 SDK

  • 點播 SDK 2.23.0 及以上版本,除預設升級 PLVIJKPlayer 引用,同時涉及最佳化 HttpDNS 內部表現,升級了 PLVAliHttpDNS 至 3.2.0 版本。而多場景 SDK 1.24.0 及以下版本、點播播放器 SDK 2.5.0 及以下版本 仍使用 PLVAliHttpDNS 1.10.x 版本,會造成 SDK 衝突。
  • 為避免 PLVAliHttpDNS 升級導致的衝突問題,可選擇引用 PLVAliHttpDNS 1.10.x 的版本:將點播 SDK 版本號控制在 2.22.2-2.22.4 版本,點播播放器 SDK 版本號控制在 2.5.0,多場景 SDK 版本號控制在 1.20.0-1.24.0 版本。後續我們會陸續發布適配 PLVAliHttpDNS 升級的多場景 SDK 和點播播放器 SDK。
  • 同時整合多場景 SDK 和點播相關 SDK,需升級 PLVIJKPlayer 0.15.0 版本,解決 bitcode 問題以及 maskView 同名屬性問題
  • 若有引用相關問題可及時與保利威客服聯繫,我們竭誠為您解決相關問題。

步驟 2

處理現有框架的 Bitcode 問題

如果您遇到與任何框架(包括第三方框架)相關的 bitcode 錯誤:

導航到框架目錄:


cd path/to/Framework.framework

檢查框架是否包含 bitcode:


otool -l Framework | grep __LLVM | wc -l

如果結果不為 0,移除 bitcode:


xcrun bitcode_strip -r Framework -o Framework

以上是保利威行動端 SDK Xcode 16 適配相關問題與說明,若有疑問可於聯繫保利威服務群聯繫技術顧問。demo 演示或合作諮詢請掃描下方二維碼。

添加保利威技術顧問

獲取專屬解決方案

联系客服,在线咨询